package io.github.iogogogo.commons.support.wrapper;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * Created by tao.zeng on 2024/11/17.
 */
@Data
public class PageWrapper<T> implements Serializable {

    /**
     * 当前页，每页显示size
     */
    private int pageNo, pageSize;

    /**
     * 总记录数，总页数
     */
    private long totalSize, totalPage;

    /**
     * 分页结果数据
     */
    private List<T> records;

    /**
     * Instantiates a new Page wrapper.
     *
     * @param pageNo    the page no
     * @param pageSize  the page size
     * @param totalSize the total size
     * @param records   the records
     */
    public PageWrapper(int pageNo, int pageSize, long totalSize, List<T> records) {
        this.setPageNo(pageNo);
        this.pageSize = pageSize;
        this.records = records;
        this.totalSize = totalSize;
        this.totalPage = (totalSize - 1) / pageSize + 1;
    }

    /**
     * Sets page no.
     *
     * @param pageNo the page no
     */
    public void setPageNo(int pageNo) {
        if (pageNo <= 0) this.pageNo = 1;
        this.pageNo = pageNo;
    }

    /**
     * 计算总页数
     * 此方法用于根据数据总量和每页显示的数量来计算总页数
     * 包含了多种计算总页数的方法，展示了不同的计算逻辑
     */
    private void calcTotalPage() {
        // 数据总量
        int totalSize = 11;
        // 一页显示条数
        int pageSize = 3;
        // 总页数
        int totalPage;

        // 计算总页数，这里忽略了余数，暂时
        totalPage = totalSize / pageSize;
        /*
         * if (totalSize % pageSize != 0) {
         *     totalPage++;
         }
         */
        // 直接增加总页数，考虑到上面的计算没有包含余数部分
        totalPage++;

        System.out.println(totalPage);
        // 输出考虑余数的总页数计算结果，使用了数学技巧来确保余数被考虑在内
        System.out.println((totalSize - 1) / pageSize + 1);
        // 另一种考虑余数的总页数计算方法，通过增加pageSize-1来确保即使有余数也能正确计算总页数
        System.out.println((totalSize + pageSize - 1) / pageSize);
    }
}
